Generally, video encoders and decoders (collectively referred to as “CODECs”) translate video image files between compressed and uncompressed states for efficiently transmitting video. Up until recently, most conventional video coding standards had either suboptimal or no effective techniques to, for example, reduce block distortion during video decoding. Specifically, those conventional coding standards reduce image distortion by filtering entire frames of video (i.e., completely decoded frames) during a post-process subsequent to the decoding process. In one approach to improve coding efficiency, as well as minimize ringing and blocking artifacts, at least one conventional coding scheme implements an “in-loop” deblocking filter. In particular, the deblocking filter is disposed in the same loop or path so that motion compensation operations can use previously deblocked frames (i.e., reference frames) rather than decoded video that is yet to be deblocked. Typically, a deblocking filter operates to smooth the edges of blocks to reduce perceptible boundaries between decoded blocks of pixels. This improves the appearance of decoded images. While functional, this traditional approach to implementing in-loop deblocking filtering has several drawbacks, as described next.
FIG. 1 is a common process flow showing drawbacks to decoding and deblocking in accordance with traditional in-loop filtering. FIG. 1 shows two frames—frame 0 and frame 1—each undergoing a decoding operation 102 and a deblocking filter operation 130. Once frame (“0”) 100 is decoded, it is passed to deblocking filter operation 130 as frame (“0”) 120 for generating a deblocked frame at time t0 on timeline 160. In particular, deblocking filter process 130 beings at block 122 and then deblocks subsequent blocks, on a block-by-block basis, in the same row from left to right. Then, deblocking filter process deblocks each subsequent row in a similar manner. As deblocking filter operation 130 processes frame (“0”) 120 in a normal deblocking order from upper-left cornered blocks to lower-right cornered blocks, decoding operation 102 begins decoding frame (“1”) 140 at block 152. But as is shown, block 152 depends on pixel data in a previous frame (e.g., frame 0) for proper decoding. For example, decoding of block 152 might depend on prediction data derived from block 124. Since decoding operation 102 cannot decode block 152 until block 122 and all intervening blocks up through block 124 are deblocked, decoding operation 102 for frame (“1”) 140 is then “stalled” or delayed by an amount of time (“t_delay”) 180. Fully decoded frame (“1”) 140 is therefore decoded as frame (“1”) 150 at time t1. Generally, amount of time 180 is equivalent to the amount of time needed by deblocking filter operation 130 to deblock frame (“0”) 120. Afterwards, frame (“1”) 170 is deblocked at time t2 by deblocking operation 130.
By stalling decoding of frame (“1”) 140 until block 124 is deblocked, a conventional decoder has a drawback of delaying the decoding of that frame until time t1 rather than decoding it at time t0. In some cases, decoding operation 102 for frame (“1”) 140 stalls until the entire frame (“0”) 120 is deblocked. In other cases, decoding operation 102 for frame (“1”) 140 stalls until block 124 is deblocked, which includes deblocking all intervening blocks up through block 124. While decoding operation 102 will then resume decoding frame (“1”) 140, it may again stall on another block (not shown) that depends on frame (“0”) 120, if such a dependency exists. Another drawback is that a decoder and other circuitry used to generate video images must remain idle for some time (“idle time”) during cumulative amounts of time 180, thereby reducing the rate at which frames of video can be generated.
In view of the foregoing, it would be desirable to provide a decoder, an apparatus and a method that minimizes the above-mentioned drawbacks, thereby facilitating accelerated decoding.